package com.hqj;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.oracle.jrockit.jfr.DataType;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class AutoMybatisPlus {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
        System.out.println("==============自动生成开始"+sdf.format(new Date())+"===========");
        createGenerator();
        System.out.println("==============自动生成结束"+sdf.format(new Date())+"===========");
    }

    public static void createGenerator(){
        //创建代码生成器
        AutoGenerator ag = new AutoGenerator();
        ag.setGlobalConfig(getConfig());
        ag.setDataSource(getDataSourceConfig());
        ag.setPackageInfo(getPackageConfig());
        ag.setTemplate(getTemplate());
        ag.setStrategy(getStrategyConfig());
        //执行生成
        ag.execute();
    }

    //配置全局变量
    public static GlobalConfig getConfig(){
        //全局配置变量
        GlobalConfig gc = new GlobalConfig();
        //代码生成的目录
        String rootPath = "D:\\Workspaces\\Idea\\TheCodeOfJava202012\\springboot20210122";
        //最终目录
        String javaPath = "/src/main/java";
        gc.setOutputDir(rootPath + javaPath);
        //开发者信息
        gc.setAuthor("HQJ");
        //是否自动打开 false不打开
        gc.setOpen(false);
        //是否覆盖
        gc.setFileOverride(false);
        //主键生成策略
        gc.setIdType(IdType.AUTO);
        //日期类型
        gc.setDateType(DateType.ONLY_DATE);
        //设置默认后缀名
        gc.setMapperName("%sDao");
        gc.setServiceName("%sService");
        gc.setServiceImplName("%sServiceI");
        gc.setControllerName("%sController");
        return gc;
    }

    //配置数据源
    public static DataSourceConfig getDataSourceConfig(){
        //创建数据源
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://127.0.0.1:3306/ssm2020?characterEncoding=utf-8");
        dsc.setUsername("root");
        dsc.setPassword("bts.2015");
        dsc.setDriverName("com.mysql.jdbc.Driver");
        return dsc;
    }

    //配置包信息
    public static PackageConfig getPackageConfig(){
        //创建包对象
        PackageConfig pc = new PackageConfig();
        //父包
        pc.setParent("com.springboot");
        //配置控制器包
        pc.setController("controller");
        //配置服务层
        //pc.setService("service");
        pc.setServiceImpl("service");
        //配置数据处理层
        pc.setMapper("mapper");
        //配置实体包
        pc.setEntity("domain");

        return pc;
    }

    //配置模板信息
    public static TemplateConfig getTemplate(){
        TemplateConfig tc = new TemplateConfig();
        //tc.setMapper(null);//不生成Mapper
        tc.setService(null);//不生成service接口
        //tc.setServiceImpl(null);//不生成service接口实现类
        //tc.setController(null);//不生成controller
        //tc.setEntity(null);//不生成实体
        tc.setXml(null);//不生成xml文件
        return tc;
    }

    //配置策略信息
    public static StrategyConfig getStrategyConfig(){
        //创建策略对象
        StrategyConfig sc = new StrategyConfig();
        //指定访问表
        sc.setInclude("ssm_files");//如果多个表用,隔开
        //配置实体与表名策略
        sc.setNaming(NamingStrategy.underline_to_camel);//SsmFile
        //属性名与列名的策略
        sc.setColumnNaming(NamingStrategy.underline_to_camel);
        //是否使用lombok
        sc.setEntityLombokModel(true);
        //是否使用restController
        sc.setRestControllerStyle(true);
        //生成类名是去除前缀
        sc.setTablePrefix("ssm_");
        return sc;
    }


}
